home *** CD-ROM | disk | FTP | other *** search
Text File | 1996-06-12 | 8.2 KB | 491 lines | [TEXT/CWIE] |
- //
- // Complaints and kudos to:
- //
- // Pete Gontier
- // Apple Macintosh Developer Technical Support
- // <gurgle@apple.com>
- //
-
- #define OLDROUTINELOCATIONS 0
- #define OLDROUTINENAMES 0
- #define SystemSevenOrLater 1
-
- #ifndef __FONTS__
- # include <Fonts.h>
- #endif
-
- #ifndef __DIALOGS__
- # include <Dialogs.h>
- #endif
-
- #ifndef __RESOURCES__
- # include <Resources.h>
- #endif
-
- #ifndef __STANDARDFILE__
- # include <StandardFile.h>
- #endif
-
- #ifndef __APPLEEVENTS__
- # include <AppleEvents.h>
- #endif
-
- #include "MoreFinderEvents.h"
-
- static Boolean gQuitting;
-
- static pascal OSErr QuitAppleEventHandler (const AppleEvent *, AppleEvent *, long)
- {
- gQuitting = true;
- return noErr;
- }
-
- static pascal OSErr InitMac (void)
- {
- MaxApplZone ( );
- InitGraf (&(qd.thePort));
- InitFonts ( );
- InitWindows ( );
- InitMenus ( );
- TEInit ( );
- InitDialogs (nil);
-
- return noErr;
- }
-
- static pascal void AppleMenuCommand (short)
- {
- }
-
- static pascal short DlgHookYDProc (short item, DialogRef dRef, void *ydP)
- {
- if (GetWRefCon (dRef) == sfMainDialogRefCon)
- {
- if (item == sfHookFirstCall)
- {
- Handle messageDitlH = Get1Resource ('DITL',*(short*)ydP);
- if (!ResError ( ) && messageDitlH)
- {
- DetachResource (messageDitlH);
- if (ResError ( ))
- ReleaseResource (messageDitlH);
- else
- {
- AppendDITL (dRef,messageDitlH,appendDITLBottom);
- DisposeHandle (messageDitlH);
- }
- }
- }
- }
-
- return item;
- }
-
- static pascal OSErr SelectAndAct (pascal OSErr (*actor) (const AliasRecord **), Boolean useParent)
- {
- OSErr err = noErr;
-
- StandardFileReply *replyP = (StandardFileReply *) NewPtr (sizeof (StandardFileReply));
- if (!(err = MemError ( )))
- {
- Point sfPoint = { -1, -1 };
- short msgDitlResID = useParent ? 129 : 128;
- CustomGetFile (nil,-1,nil,replyP,sfGetDialogID,sfPoint,DlgHookYDProc,nil,nil,nil,&msgDitlResID);
- if (replyP->sfGood)
- {
- if (!useParent || !(err = FSMakeFSSpec (replyP->sfFile.vRefNum,replyP->sfFile.parID,nil,&(replyP->sfFile))))
- {
- AliasHandle aliasH = nil;
-
- if (!(err = NewAliasMinimal (&(replyP->sfFile), &aliasH)))
- {
- err = actor (aliasH);
- DisposeHandle ((Handle) aliasH);
- if (!err) err = MemError ( );
- }
- }
- }
- DisposePtr ((Ptr) replyP);
- if (!err) err = MemError ( );
- }
-
- return err;
- }
-
- static pascal Boolean VolFileFilterYDProc (CInfoPBPtr, void *)
- {
- return true;
- }
-
- static pascal short VolDlgHookYDProc (short item, DialogRef, void *)
- {
- switch (item)
- {
- case sfHookFirstCall :
-
- item = sfHookGoToDesktop;
- break;
-
- case sfHookGoToAliasTarget :
- case sfHookGoToPrevDrive :
- case sfHookGoToNextDrive :
- case sfHookChangeSelection :
-
- SysBeep (10);
- item = sfHookNullEvent;
- break;
-
- case sfHookOpenFolder :
-
- item = sfItemOpenButton;
- break;
- }
-
- return item;
- }
-
- static pascal OSErr ChooseAndUnmount (void)
- {
- OSErr err = noErr;
- StandardFileReply reply;
- Point sfWhere = {-1,-1};
- CustomGetFile (VolFileFilterYDProc,-1,nil,&reply,sfGetDialogID,sfWhere,VolDlgHookYDProc,nil,nil,nil,nil);
- if (reply.sfGood)
- err = MFE_UnmountVolume (reply.sfFile.vRefNum);
- return err;
- }
-
- static pascal OSErr PageSetupAndPrint (const AliasRecord **aliasH)
- {
- OSErr err = MFE_PageSetup (aliasH);
- if (!err) err = MFE_PrintWindow (aliasH);
- return err;
- }
-
- static const AliasRecord **gAliasToDrag;
-
- static pascal OSErr MoveFile2 (const AliasRecord **destAlias)
- {
- return MFE_Move (gAliasToDrag,destAlias);
- }
-
- static pascal OSErr CopyFile2 (const AliasRecord **destAlias)
- {
- return MFE_Copy (gAliasToDrag,destAlias);
- }
-
- static pascal OSErr CopyFile (const AliasRecord **aliasToDrag)
- {
- gAliasToDrag = aliasToDrag;
- return SelectAndAct (CopyFile2,true);
- }
-
- static pascal OSErr MoveFile (const AliasRecord **aliasToDrag)
- {
- gAliasToDrag = aliasToDrag;
- return SelectAndAct (MoveFile2,true);
- }
-
- static pascal OSErr FinderMenuCommand (short menuItem)
- {
- OSErr err = unimpErr;
-
- enum
- {
- kMenuItem_Title,
-
- kMoveFile,
- kCopyFile,
-
- kMenuItem_Divider2,
-
- kMenuItem_Reveal,
- kMenuItem_OpenParent,
- kMenuItem_CloseParent,
-
- kMenuItem_Divider3,
-
- kMenuItem_PageSetupParent,
- kMenuItem_PrintParent,
-
- kMenuItem_Divider4,
-
- kMenuItem_MakeAlias,
- kMenuItem_Duplicate,
- kMenuItem_OpenSelection,
- kMenuItem_PrintSelection,
-
- kMenuItem_Divider5,
-
- kMenuItem_PutAway,
- kMenuItem_UnmountVol,
-
- kMenuItem_Divider6,
-
- kMenuItem_GetInfo,
- kMenuItem_CloseGetInfo,
-
- kMenuItem_Divider7,
-
- kMenuItem_Sharing,
- kMenuItem_CloseSharing,
-
- kMenuItem_Divider8,
-
- kMenuItem_Sleep,
- kMenuItem_Restart,
- kMenuItem_ShutDown,
-
- kMenuItem_Divider9,
-
- kMenuItem_EmptyTrash,
-
- kMenuItem_Divider10,
-
- kMenuItem_ShowAbout,
- kMenuItem_HideAbout,
-
- kMenuItem_Divider11,
-
- kMenuItem_ShowClip,
- kMenuItem_HideClip
- };
-
- switch (menuItem)
- {
- case kCopyFile :
-
- err = SelectAndAct (CopyFile,false);
- break;
-
- case kMoveFile :
-
- err = SelectAndAct (MoveFile,false);
- break;
-
- case kMenuItem_PutAway :
-
- err = SelectAndAct (MFE_PutAway,false);
- break;
-
- case kMenuItem_MakeAlias :
-
- err = SelectAndAct (MFE_MakeAlias,false);
- break;
-
- case kMenuItem_Duplicate :
-
- err = SelectAndAct (MFE_Duplicate,false);
- break;
-
- case kMenuItem_OpenSelection :
-
- err = SelectAndAct (MFE_OpenSelection,false);
- break;
-
- case kMenuItem_PrintSelection :
-
- err = SelectAndAct (MFE_PrintSelection,false);
- break;
-
- case kMenuItem_PageSetupParent :
-
- err = SelectAndAct (MFE_PageSetup,true);
- break;
-
- case kMenuItem_PrintParent :
-
- err = SelectAndAct (PageSetupAndPrint,true);
- break;
-
- case kMenuItem_OpenParent :
-
- err = SelectAndAct (MFE_OpenSelection,true);
- break;
-
- case kMenuItem_CloseParent :
-
- err = SelectAndAct (MFE_CloseWindow,true);
- break;
-
- case kMenuItem_CloseGetInfo :
-
- err = SelectAndAct (MFE_CloseGetInfo,false);
- break;
-
- case kMenuItem_GetInfo :
-
- err = SelectAndAct (MFE_OpenGetInfo,false);
- break;
-
- case kMenuItem_CloseSharing :
-
- err = SelectAndAct (MFE_CloseSharing,true);
- break;
-
- case kMenuItem_Sharing :
-
- err = SelectAndAct (MFE_OpenSharing,true);
- break;
-
- case kMenuItem_EmptyTrash :
-
- err = MFE_EmptyTrash ( );
- break;
-
- case kMenuItem_ShowAbout :
-
- err = MFE_ShowAbout ( );
- break;
-
- case kMenuItem_HideAbout :
-
- err = MFE_HideAbout ( );
- break;
-
- case kMenuItem_ShowClip :
-
- err = MFE_ShowClipboard ( );
- break;
-
- case kMenuItem_HideClip :
-
- err = MFE_HideClipboard ( );
- break;
-
- case kMenuItem_Reveal :
-
- err = SelectAndAct (MFE_Reveal,false);
- break;
-
- case kMenuItem_UnmountVol :
-
- err = ChooseAndUnmount ( );
- break;
-
- case kMenuItem_Sleep :
-
- err = MFE_Sleep ( );
- break;
-
- case kMenuItem_Restart :
-
- err = MFE_Restart ( );
- break;
-
- case kMenuItem_ShutDown :
-
- err = MFE_ShutDown ( );
- break;
- }
-
- return err;
- }
-
- static pascal void EditMenuCommand (short)
- {
- }
-
- static pascal OSErr Command (long ms)
- {
- OSErr err = noErr;
-
- short menuID = ms >> 16,
- menuItem = ms;
-
- enum
- {
- kMenuID_File = 129,
- kMenuID_Apple,
- kMenuID_Finder,
- kMenuID_Edit
- };
-
- switch (menuID)
- {
- case kMenuID_File :
-
- gQuitting = true;
- break;
-
- case kMenuID_Apple :
-
- AppleMenuCommand (menuItem);
- break;
-
- case kMenuID_Finder :
-
- err = FinderMenuCommand (menuItem);
- break;
-
- case kMenuID_Edit :
-
- EditMenuCommand (menuItem);
- break;
-
- }
-
- return err;
- }
-
- static pascal OSErr HandleEvent (const EventRecord *eventP)
- {
- OSErr err = noErr;
-
- if (eventP->what == kHighLevelEvent)
- AEProcessAppleEvent (eventP);
- else if (eventP->what == mouseDown)
- {
- WindowRef whichWindow;
- short partCode = FindWindow (eventP->where, &whichWindow);
- if (partCode == inMenuBar)
- {
- long ms = MenuSelect (eventP->where);
- if (ms)
- err = Command (ms);
- HiliteMenu (0);
- }
- }
-
- return err;
- }
-
- static pascal Boolean SetUpMenuBar (void)
- {
- Boolean result = false;
- Handle mBar = GetNewMBar (128);
- if (!ResError ( ) && mBar)
- {
- SetMenuBar (mBar);
- AppendResMenu (GetMenuHandle (130), 'DRVR');
- DrawMenuBar ( );
- result = true;
- ReleaseResource (mBar);
- }
- return result;
- }
-
- void main (void)
- {
- if (!InitMac ( ))
- {
- if (SetUpMenuBar ( ))
- {
- if (!(AEInstallEventHandler (kCoreEventClass, kAEQuitApplication,
- NewAEEventHandlerProc (QuitAppleEventHandler), 0, false)))
- {
- do
- {
- OSErr err = noErr;
- EventRecord event;
- InitCursor ( );
- WaitNextEvent (everyEvent, &event, -1, nil);
- err = HandleEvent (&event);
- if (err) SysBeep (10);
- }
- while (!gQuitting);
- }
- }
- }
- }
-